require("dotenv").config(); // 加载数据库配置
const express = require("express");
const path = require("path");
const staticRoot = path.resolve(__dirname, "../public");
const cors = require("cors"); // 引入 cors 中间件
const app = express();

// 跨域处理
// 动态配置 cors 中间件
const corsOptionsDelegate = (req, callback) => {
  const corsOptions = {
    origin: false, // 允许跨域
    methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', // 允许的方法
    allowedHeaders: 'Content-Type, Authorization', // 允许的头信息
    credentials: true // 允许发送 cookies
  };
  // 允许的来源
  const allowedOrigins = ['http://localhost:3000', ''];
  if (allowedOrigins.indexOf(req.header('Origin')) !== -1) {
    corsOptions.origin = true; // 反射请求的来源
  } else {
    corsOptions.origin = false; // 不允许跨域
  }
  callback(null, corsOptions);
};
app.use(cors(corsOptionsDelegate)); // 使用 cors 中间件
// 添加cookie 中间件
const cookieParser = require("cookie-parser");
app.use(cookieParser());
// 添加token 中间件
app.use(require("./tokenMiddleware"));

// 中间件,访问静态资源
app.use(express.static(staticRoot));
// 中间件,解析post请求的body
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
// 路由
app.use("/api/user", require("./api/user"));
app.use("/api/login", require("./api/login"));
app.use("/api/shop", require("./api/shop"));
app.use("/api/merchandise", require("./api/merchandise"));
app.use("/api/order", require("./api/order"));
app.use("/api/stock", require("./api/stock"));

// 中间件 错误处理
app.use(require("./errorMiddleware"));

app.listen(process.env.NODE_PORT, () => {
	console.log("服务已开启");
});
